/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ces31.ChineseDicesClient;


import ces31.ChineseDicesClient.IU.IU_Espera;
import ces31.ChineseDicesClient.IU.IU_Inicial;
import ces31.ChineseDicesClient.RN.RN_Jogo;
import ces31.ChineseDicesCommon.ClienteInterface;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

/**
 *
 * @author Anderson Aiziro
 */

public class SO_SistemaCliente_Facade extends UnicastRemoteObject implements ClienteInterface{

/**
 * Uso do Padrao Facade. Client implementation eh responsavel por delegar as responsabilidades
 * para as classes RN
 *
 * @throws java.rmi.RemoteException
 */
    public SO_SistemaCliente_Facade() throws RemoteException{
        super();
    }
    
    public void habilitarJogada() throws RemoteException{
        RN_JogoInstance.habilitarJogada();
    }

    public void apresentarResultadoDoJogo(String name) throws RemoteException {
        RN_JogoInstance.apresentarResultadoDoJogo(name);
    }

    public void apresentarAfirmacao(Integer quantity, Integer value) throws RemoteException {
       RN_JogoInstance.apresentarAfirmacao(quantity,value);
    }

    public void entregarMensagem(String message) throws RemoteException {
        IU_ResultadoInstance = (IU_Espera) IU_InicialInstance.apresentarMensagem(message);
    }

    public void atualizarInformacoesJogador(List<Integer> values, Integer quantity, String winner)throws RemoteException {
        RN_JogoInstance.atualizarInformacoesJogador( values, quantity, winner);
    }

    public void iniciarJogo(String nomeJogador, String nomeAdversario)throws RemoteException {
       RN_JogoInstance = IU_ResultadoInstance.iniciarJogo(this,nomeJogador,nomeAdversario);
 
    }



    public static SO_SistemaCliente_Facade getSO_SistemaCliente_Facade() throws RemoteException{
        if(SO_SistemaClienteFacadeSingleton == null){
            SO_SistemaClienteFacadeSingleton = new SO_SistemaCliente_Facade();
        }
        return SO_SistemaClienteFacadeSingleton;
    }

    public IU_Inicial getIU_InicialInstance() {
        return IU_InicialInstance;
    }

    public void setIU_InicialInstance(IU_Inicial IU_InicialInstance) {
        this.IU_InicialInstance = IU_InicialInstance;
    }

    
    private RN_Jogo RN_JogoInstance;
    private IU_Inicial IU_InicialInstance;
    private IU_Espera IU_ResultadoInstance;
    private static SO_SistemaCliente_Facade  SO_SistemaClienteFacadeSingleton;

}